﻿package com.jacky.utils  {
	import flash.text.TextField;
	import flash.events.TimerEvent;
	import flash.utils.Timer;

	/**
	 * DateUtil 用于处理日期和时间的工具类
	 * @author jacky
	 * @version 0.1
	 */
	public class DateUtil {
		
		public static var timeD:uint;
		public static var _someday:Date;
		public static var _txt:TextField;
		/**
		 * 该方法提供计算离某一指定日剩余时间
		 * @param	someday 一个Date对象 
		 * @param	txt 一个TextField对象 
		 * @example 以下是该类使用范例
		 * DateUtil.countDown(new Date(2010,05,04,20,0),txt)注意：这里面的的月份必须减一；实际是距离2010年6月4日的倒计时
		 */
		public function countDown(someday:Date, txt:TextField) {
				_txt = txt;
				_someday=someday
				timerHandler();
				var myTimer:Timer=new Timer(1000,0);
				myTimer.addEventListener(TimerEvent.TIMER, timerHandler);
				myTimer.start();
		}
		private function timerHandler(e:TimerEvent=null):void {
			var now:Date = new Date()
			var time:Number = _someday.getTime() - now.getTime()
			//someday.getSeconds
			//trace( time % (1000 * 60 * 60 * 24))
			//天 1000*60*60*24
			var sy:uint=(1000 * 60 * 60 * 24)
			var day:uint = time / sy >> 0
			sy=time % (1000 * 60 * 60 * 24)
			var hours:uint = sy / (1000 * 60 * 60) >> 0
			sy=sy%(1000 * 60 * 60) 
			var minutes:uint = sy / (1000 * 60 ) >> 0
			sy=sy%(1000 * 60 ) 
			var seconds:uint = sy / (1000  ) >> 0;
			var obj:Object = new Object();
			obj.day = formatter(day);
			obj.hours = formatter(hours);
			obj.minutes = formatter(minutes);
			obj.seconds = formatter(seconds);
			_txt.text = (obj.day +"天" + obj.hours +":" + obj.minutes +":" + obj.seconds);
		}
		private function clearTime(){
			//myTimer.stop();
		}
		/**
		 * 该方法将数值时间（以秒或毫秒为单位）转换为时间戳，不足两位数的自动补零，并进行格式化
		 * @param	time 数值时间，以秒或毫秒为单位均可
		 * @param	formatExp 格式化表达式，默认：XXXX年XX月XX日 XX时XX分XX秒
		 * @return     格式化后的时间戳
		 * @example 以下是该类使用范例
			<listing version="3.0">
			var phpTimeResult:String = DateUtil.format(1251443675);
			trace("已秒为单位的数值时间：" + phpTimeResult); //已秒为单位的数值时间：2009年08月28日 15时14分35秒

			var asTimeResult:String = DateUtil.format(1251443585703);
			trace("已秒为单位的数值时间：" + asTimeResult); //已秒为单位的数值时间：2009年08月28日 15时13分05秒

			var asTimeResultFormatted:String = DateUtil.format(1251443585703, "%M-%D %h:%m");
			trace("格式化后的时间戳：" + asTimeResultFormatted); //格式化后的时间戳：08-28 15:13 </listing>
		 */
		public static function format(time:Number, formatExp:String = "%Y年%M月%D日 %h时%m分%s秒"):String {
			if (time.toString().length == 10) time *= 1000;
			var date:Date = new Date(time);
			formatExp = formatExp.replace("%Y", date.fullYear);
			formatExp = formatExp.replace("%M", formatter(date.month + 1));
			formatExp = formatExp.replace("%D", formatter(date.date));
			formatExp = formatExp.replace("%h", formatter(date.hours));
			formatExp = formatExp.replace("%m", formatter(date.minutes));
			formatExp = formatExp.replace("%s", formatter(date.seconds));
			return formatExp;
		}
		private static function formatter(time:uint):String {
			if (time < 10) {
				return String("0" + time);
			}
			return time.toString();
		}
	}
}